VFORK
Section: System Calls (2)
Index
Return to Main Contents
BSD mandoc
BSD 4
NAME
vfork
- spawn new process in a virtual memory efficient way
SYNOPSIS
Fd #include <unistd.h>
Ft pid_t
Fn vfork void
DESCRIPTION
Fn Vfork
can be used to create new processes without fully copying the address
space of the old process, which is horrendously inefficient in a paged
environment. It is useful when the purpose of
fork(2)
would have been to create a new system context for an
execve.
Fn Vfork
differs from
fork
in that the child borrows the parent's memory and thread of
control until a call to
execve(2)
or an exit (either by a call to
exit(2)
or abnormally.)
The parent process is suspended while the child is using its resources.
Fn Vfork
returns 0 in the child's context and (later) the pid of the child in
the parent's context.
Fn Vfork
can normally be used just like
fork.
It does not work, however, to return while running in the childs context
from the procedure that called
Fn vfork
since the eventual return from
Fn vfork
would then return to a no longer existent stack frame.
Be careful, also, to call
_exit
rather than
exit
if you can't
execve,
since
exit
will flush and close standard I/O channels, and thereby mess up the
parent processes standard I/O data structures.
(Even with
fork
it is wrong to call
exit
since buffered data would then be flushed twice.)
SEE ALSO
fork(2),
execve(2),
sigaction(2),
wait(2),
DIAGNOSTICS
Same as for
fork.
BUGS
This system call will be eliminated when proper system sharing
mechanisms are implemented.
Users should not depend on the memory
sharing semantics of
vfork
as it will, in that case, be made synonymous to
fork.
To avoid a possible deadlock situation,
processes that are children in the middle
of a
Fn vfork
are never sent
SIGTTOU
or
SIGTTIN
signals; rather,
output or
ioctl(2)
calls
are allowed
and input attempts result in an end-of-file indication.
HISTORY
The
Fn vfork
function call appeared in
BSD 3.0
Index
- NAME
-
- SYNOPSIS
-
- DESCRIPTION
-
- SEE ALSO
-
- DIAGNOSTICS
-
- BUGS
-
- HISTORY
-
This document was created by
man2html,
using the manual pages.
Time: 16:28:59 GMT, April 18, 2022